package main

import (
	"fmt"
	"os"
	"os/exec"
	"syscall"
)

func main() {
	switch os.Args[1] {
	case "run":
		run()
	case "child":
		child()
	default:
		//抛出错误
		panic("have not dinfined")
	}
}
func run() {
	fmt.Println("进入新的shell")
	childArgs := []string{"child"}
	args := append(childArgs, os.Args[2])
	//执行linux的命令
	cmd := exec.Command(os.Args[0], args...)
	cmd.SysProcAttr = &syscall.SysProcAttr{
		//用于在Linux中创建一个新的UTS namespace
		Cloneflags: syscall.CLONE_NEWUTS | syscall.CLONE_NEWPID,
	}
	//标准输入流
	cmd.Stdin = os.Stdin
	//标准输出流
	cmd.Stdout = os.Stdout
	//标准错误
	cmd.Stderr = os.Stderr
	if err := cmd.Run(); err != nil {
		panic(err)
	}
}
func child() {
	//执行linux的命令
	cmd := exec.Command(os.Args[2])
	//修改主机名
	syscall.Sethostname([]byte("container"))
	//标准输入流
	cmd.Stdin = os.Stdin
	//标准输出流
	cmd.Stdout = os.Stdout
	//标准错误
	cmd.Stderr = os.Stderr
	if err := cmd.Run(); err != nil {
		panic(err)
	}
}
